# physics/check_collision.py
# 检测火柴人是否与任一平台发生“脚部碰撞”，即是否站在平台上
# 用于判断是否可以跳跃或停止下落

def check_collision(stickman, platforms):
    """
    检测火柴人是否站在任一平台上

    参数:
        stickman: Stickman 类的实例，包含 rect 属性
        platforms: Platform 对象列表，每个平台有 rect 属性

    返回值:
        bool: True 表示火柴人站在某个平台上，False 表示在空中
    """
    # 获取火柴人的碰撞矩形
    player_rect = stickman.rect  # [left, top, width, height]

    # 火柴人脚部位置（用于检测是否“踩”到平台）
    # 我们用火柴人底部中心附近的一小段横线来模拟“脚”
    player_foot_y = player_rect[1] + player_rect[3]  # 脚的 y 坐标（底部）
    player_center_x = player_rect[0] + player_rect[2] // 2  # 水平中心

    # 遍历所有平台
    for platform in platforms:
        plat_rect = platform.rect  # [x, y, width, height]

        # 检查火柴人是否在平台上方且正在下落
        # 条件1：火柴人底部 y 在平台顶部 y 附近（允许微小误差）
        # 条件2：火柴人水平中心在平台范围内
        # 条件3：火柴人正在下落或刚好接触（vy >= 0）

        vertical_aligned = abs(player_foot_y - plat_rect[1]) < 5  # 脚接近平台顶部
        horizontal_overlapped = plat_rect[0] <= player_center_x <= plat_rect[0] + plat_rect[2]
        is_falling_or_touching = stickman.vy >=0  # 正在下落或静止

        if vertical_aligned and horizontal_overlapped and is_falling_or_touching:
            # 确保火柴人落在平台上，y 对齐到平台顶部
            stickman.y = plat_rect[1] - (stickman.height // 2)  # 调整火柴人 y 位置
            stickman.vy = 0  # 停止垂直运动
            stickman.on_ground = True  # 标记为在地面
            return True  # 已站在平台上，无需检查其他

    # 如果没有站在任何平台上
    stickman.on_ground = False
    return False